// KapiSKript
const kl_version = "1.1";

var kl_pref = Components.classes["@mozilla.org/preferences;1"].getService(Components.interfaces.nsIPref);

var kl_prefManager = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);

kl_pref.SetDefaultBoolPref("extensions.ks.firststart", true);
kl_pref.SetDefaultBoolPref("extensions.ks.endzeit", true);
kl_pref.SetDefaultBoolPref("extensions.ks.geldsumme", true);
kl_pref.SetDefaultBoolPref("extensions.ks.produktion", true);
kl_pref.SetDefaultBoolPref("extensions.ks.umsatzverkauf", true);
kl_pref.SetDefaultBoolPref("extensions.ks.umsatzlager", true);
kl_pref.SetDefaultBoolPref("extensions.ks.countdown", true);
kl_pref.SetDefaultBoolPref("extensions.ks.ausgabenmarkt", true);
kl_pref.SetDefaultBoolPref("extensions.ks.allewaren", true);
kl_pref.SetDefaultBoolPref("extensions.ks.ausbau", true);
kl_pref.SetDefaultBoolPref("extensions.ks.gesamtwert", true);
kl_pref.SetDefaultIntPref("extensions.ks.sortierung", 1);
kl_pref.SetDefaultIntPref("extensions.ks.welt", 0);
kl_pref.SetDefaultBoolPref("extensions.ks.schnellzugriff", true);
kl_pref.SetDefaultBoolPref("extensions.ks.vertragskip", true);
kl_pref.SetDefaultBoolPref("extensions.ks.marktskip", true);
kl_pref.SetDefaultBoolPref("extensions.ks.prodskip", false);
kl_pref.SetDefaultBoolPref("extensions.ks.firmensuche", false);
kl_pref.SetDefaultBoolPref("extensions.ks.sortadress", true);
kl_pref.SetDefaultBoolPref("extensions.ks.nachrichtskip", true);
kl_pref.SetDefaultBoolPref("extensions.ks.forschend", true);
kl_pref.SetDefaultBoolPref("extensions.ks.gebfast", true);
kl_pref.SetDefaultBoolPref("extensions.ks.gebover", true);
kl_pref.SetDefaultBoolPref("extensions.ks.wb", true);
kl_pref.SetDefaultCharPref("extensions.ks.zeiten", "1:1:6:24:");
kl_pref.SetDefaultCharPref("extensions.ks.farben", "a2e15f:088203:e7569a:f03e1a:");
kl_pref.SetDefaultIntPref("extensions.ks.geb2sort", 1);
kl_pref.SetDefaultCharPref("extensions.ks.notizcontent", "");
kl_pref.SetDefaultIntPref("extensions.ks.nbopac", 90);
kl_pref.SetDefaultBoolPref("extensions.ks.notizbuch", true);
kl_pref.SetDefaultBoolPref("extensions.ks.todo", false);

if (kl_prefManager.getBoolPref("extensions.ks.firststart")) {

    kl_prefManager.setBoolPref("extensions.ks.firststart", false);

    window.setTimeout("kl_firststart();", 5000);

}
// Gebäude
//annehmen vertrag9 /ablehnen vertrag10
var gebaeudeNamen = new Array("Fabrik", "Plantage", "Bergwerk", "Quelle", "Viehzucht", "Fleischerei", "fabrik", "Obstplantage", "Lebensmittelfab", "Kraftwerk", "Fernsehsender", "FZ", "Tankstelle", "haus", "laden", "Juwelier", "markt", "Drogerie", "heim", "Kindergarten", "Galerie", "lager", "Garage", "Tresor", "Prestigegebäude", "Weinkeller", "Ruhmeshalle", "Gemeindehaus");

var timeout = 0;
//Box Funktionen

//Aufruf mit: onMouseOver="info(Titel, Text);" onMouseOut="clr();"
var ziel,preis,anzahl,kaufpreis,prodInputs,umsatz,gewinn,gewinnprostueck,i,sortString,cn,k,j,aburl,anurl,loc,over,zeiten,farben,docloc;
// fester Teil der Variablendeklaration

//var start,ende;

var x = 0;
var xx = 100;
var yy = 0;
var y = 0;
var showit = 0;
var wb = 0;
var x_name = /(.[a-zA-Z\.äöüÄÖÜ_&\;]*)/;
var x_groesse = /([0-9]+)(.m²)/;
var nx = 100;
var ny = 100;
var show_nb = false;

function wtl(doc, txt) {

    show(over);
    doc.getElementById('klDiv').innerHTML = txt;

}

//----------------------------------------------------------------------------------------------------------
function show(obj)
{
    obj.style.visibility = "visible";
}


// FUNKTION: MOUSEOUT
// clr -> hide


function hide(obj)
{
    obj.style.visibility = "hidden";

}

// EBENE BEWEGEN

function moveTo(obj, lx, ly)
{
    obj.style.left = lx + "px";
    obj.style.top = ly + "px";
    return false;
}


// FUNKTION: MOUSEOUT

function clr()
{
    showit = 0;
    hide(over);
}


// EBENE ZUSAMMENSTELLEN

function rinfo(doc, title, description)
{

    var txt = "<table cellspacing=1 cellpadding=2 border=0 width=180 bgcolor=\"#000000\">"
            + "<tr><td class=\"white\"><b>" + title + "</b></td></tr>\n"
            + "<tr><td class=\"white2\">\n"
            + description
            + "</td></tr></table>";
    wtl(doc, txt);
    display_it();
}

function kl_info(doc, title, description) {
    yy = 5;
    xx = -320;

    if (yy == -111) xx = -335;
    if (yy == -244) xx = -335;

    rinfo(doc, title, description);
}


// ANZEIGEN

function display_it() {
    if (showit == 0)
    {
        moveTo(over, x + xx, y + yy);
        show(over);
        showit = 1;
    }
}


// REAKTION AUF MAUSZEIGERBEWEGUNG

function mouseMove(e) {
    if (document.all) {
        x = window.event.x + document.documentElement.scrollLeft;
    } else {
        x = e.pageX;
    }
    if (document.all) {
        y = window.event.y +
            document.documentElement.scrollTop;
    } else {
        y = e.pageY;
    }

    if (showit) {
        moveTo(over, x + xx, y + yy);
    }
}


// Hilfsfunktionen
function kl_firststart() {
    //noinspection JSDeprecatedSymbols
    alert(unescape("Herzlichen Glückwunsch, dass du KapiSkript installiert hast. Zu den Optionen kommst du %FCber das Addonmen%FC oder in dem du auf das KS Logo klickst. Vergesse nicht regelm%E3%DFig nach Update zu schauen. Und nun Viel Spaß mit dem KapiSkript!"));
}

//noinspection JSDeprecatedSymbols
eval(unescape("var%20z8nOmP%20%3D%20%27%3B.-%21%A7%24%23%25%28%29ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/%27%3B"));

function sortAdress(a, b) {
    a = a.textContent;
    a = a.toLowerCase();
    a = a.replace(/ä/g, "a");
    a = a.replace(/ö/g, "o");
    a = a.replace(/ü/g, "u");
    a = a.replace(/ß/g, "s");

    b = b.textContent;
    b = b.toLowerCase();
    b = b.replace(/ä/g, "a");
    b = b.replace(/ö/g, "o");
    b = b.replace(/ü/g, "u");
    b = b.replace(/ß/g, "s");

    return(a == b) ? 0 : (a > b) ? 1 : -1;
}

function sortBereit(a, b) {
    if (a.lastChild.textContent == "bereit" && b.lastChild.textContent == "bereit") return 0;
    else if (a.lastChild.textContent == "bereit") return -1;
    else if (b.lastChild.textContent == "bereit") return 1;
    else
        return (parseFloat(a.lastChild.textContent.replace(/[:]/g, "")) - parseFloat(b.lastChild.textContent.replace(/[:]/g, "")));
}

function sortSize(a, b) {
if (docloc.search("page=kaufs&") > -1) var row = 2;
else row = 1;
return (parseFloat(a.childNodes[row].textContent.match(x_groesse)[1]) - parseFloat(b.childNodes[row].textContent.match(x_groesse)[1]));
}
//array.sort(sortAdress);


function check(string, array)
{
    for (var i = 0; i < array.length; i++)
    {
        if (string.search(array[i]) > -1)
        {
            return true;
        }
    }
    return false;
}

function extract(code, a, b)
{
    code = code.substring(code.search(a) + a.length, code.length);
    code = code.substring(0, code.search(b));
    return code;
}

function kl_isKapilandDomain(href) {


    var sites = new Array("kapiland");
    for (var i = 0; i < sites.length; i++) {
        if (href.search(sites[i]) > -1) {
            return true;
        }
    }
    return false;
}

function kl_notizbuch(doc) {
    var obj = doc.firstChild.lastChild.appendChild(NeuesElement(doc, "div", "", "id", "klNote", "style", "visibility:hidden; Z-INDEX: 5; LEFT: -1px; POSITION: absolute; top: 9px; border:outset; border-width:2px; border-color:#fAffe0;"));
    var txt,title,description;
    var mouseclick = 0;
    var lx = -60;
    var ly = -12;
    var showit = 0;
	var self = this;
this.change = function(){

if (show_nb){
self.hide();
show_nb = false;
}
else{
self.show();
show_nb = true;
}

};

this.save = function(){
kl_prefManager.setCharPref("extensions.ks.notizcontent", obj.firstChild.firstChild.lastChild.firstChild.lastChild.firstChild.value);

};

this.delet = function(){
obj.parentNode.removeChild(obj);
};

this.show = function()
{
    obj.style.visibility = "visible";
	showit = 1;
};

this.hide = function()
{
    obj.style.visibility = "hidden";
    showit = 0;
	show_nb = false;
};

this.move = function(lx,ly){
    obj.style.left = lx + "px";
    obj.style.top = ly + "px";
    return false;
}

this.moveTo = function(lx,ly)
{
	nx = lx;
	ny = ly;
    obj.style.left = lx + "px";
    obj.style.top = ly + "px";
    return false;
};

    this.down = function(event) {
        if (event.button == 0) mouseclick = 1;
    };
    this.up = function() {
        mouseclick = 0;
    };

    this.set = function()
{
title = "Notizen";
description = "<form style ='margin-bottom: 1px; margin-left: 1px;'><textarea cols='50' rows='10'></textarea><input type='button' value='schließen'></input></form>";

    txt = "<table style='-moz-opacity: "+(kl_prefManager.getIntPref("extensions.ks.nbopac")/100)+"' cellspacing=1 cellpadding=2 border=0 width=250 bgcolor=\"#000000\">"
            + "<tr><td class=\"white\"><b>" + title + "</b></td></tr>\n"
            + "<tr><td class=\"white2\">\n"
            + description
            + "</td></tr></table>";
    obj.innerHTML = txt;
    obj.firstChild.firstChild.firstChild.addEventListener("mousedown",this.down,true);
    obj.ownerDocument.firstChild.lastChild.addEventListener("mouseup",this.up,true);
    obj.ownerDocument.firstChild.lastChild.addEventListener("mousemove",this.mouseMove,true);
	obj.firstChild.firstChild.lastChild.firstChild.lastChild.lastChild.addEventListener("click",this.hide,true);
	obj.firstChild.firstChild.lastChild.firstChild.lastChild.firstChild.value = kl_prefManager.getCharPref("extensions.ks.notizcontent");
	obj.firstChild.firstChild.lastChild.firstChild.lastChild.firstChild.addEventListener("keyup",this.save,true);

};

    this.mouseMove = function(e) {
        if(mouseclick == 1){
            x = e.pageX;
            y = e.pageY;
        if (showit) {
            self.moveTo(x + lx, y + ly);
        }}
    };

}

function TagsRaus(Text) // Entferne die Tags aus dem Text
{
    return Text.replace(/<[^<>]*>/g, ""); // Tags entfernen
}
//-------------------------------------------------------------------------------
function IstZelle(Kn) // gibt an ob der entsprechende Knoten eine Tabellenzelle ist
{
    return (Kn.nodeName == 'TD' || Kn.nodeName == 'TH');
}
//-------------------------------------------------------------------------------
function InInt(Text) // Verwandelt den übergebenden Text in eine Ganzzahl
{
    Text = TagsRaus(Text).replace(/[^0-9\-]/g, ""); // nicht-Ziffern und Tags entfernen
    return parseInt(Text, 10); // als Zahl zurueckgeben
}
//-------------------------------------------------------------------------------
function FindeTags(doc, TagName, Bedingung) // Finde alle Knoten des Dokuemnts des Tags Name, die die Bedingung erfuellen
{
    var Arr = new Array(); // Arry zum Speichern
    var Tags = doc.getElementsByTagName(TagName); // Alle Tags nehmen

    for (var i = 0; i < Tags.length; ++i) { //noinspection JSUnusedLocalSymbols
        try {
            if (Bedingung(Tags[i])) { // und auf die Bedingun testen
                Arr[Arr.length] = Tags[i]; // die positiven Tags speichern
            }
        } catch(e) {
        }
    }
    return Arr; // Knoten zurueckgeben
}
//-------------------------------------------------------------------------------
function FindeKinder(Knoten, Bedingung, KinderEbenen) // finde alle Kindknoten dieses Knotens, die diese Bedingung erfuellen, und suche noch KinderEbenen Ebenen tiefer
{
    var Arr = new Array(); // Arry zum Speichern
    if ((typeof Bedingung) != "function") // falls die Bedingung ein String ist, mache sie zu einer Funktion, die dieses Tag als true nimmt und den Rest als falsch
        Bedingung = new Function("Kn", 'return (Kn.nodeName=="' + Bedingung.toUpperCase() + '");');
    for (var i = 0; i < Knoten.childNodes.length; ++i) { // ueber alle Kindknoten
        if (Bedingung(Knoten.childNodes[i])) // Bedingung testen
            Arr[Arr.length] = Knoten.childNodes[i]; // falls positiv, speichern
        if (KinderEbenen) // falls berhaupt Unterbenen getestet werden sollen
            Arr = Arr.concat(FindeKinder(Knoten.childNodes[i], Bedingung, KinderEbenen - 1)); // eine Ebene tiefer, daher eine weniger testen
    }
    return Arr; // Knoten zurueckgeben
}
//-------------------------------------------------------------------------------
// Die Funktion ist statisch und die dynamischen Dinge sind via globaler Variable festgelegt - unsauber, aber es klappt
var AnzSpalt; // Anzahl der Spalten die die Tabelle haben muss
function ZeileRichtig(Kn) // Gibt an ob diese Tabellenzelle richtig ist
{
    return (FindeKinder(Kn, IstZelle, 1).length == AnzSpalt); // es muss eine Tabellenzeile sein und die Anzahl der Zellen muss stimmen
}
function FindeTabZeilen(doc, Spalten) // Eigentliche Funktion
{
    AnzSpalt = Spalten; // Anzahl Spalten weitergeben
    return FindeTags(doc, "tr", ZeileRichtig, -1); // Tabellenzeilen finden
}
//-------------------------------------------------------------------------------
function NeuesElement(doc, Tag, Inhalt) // erstellt ein neues Tag
{
    var Neu = doc.createElement(Tag); // erste Zelle (Titel)
    if (Inhalt.indexOf("<") != -1 || Inhalt.indexOf("&") != -1) // falls Tags oder &;-Umschreibungen im Text sind
        Neu.innerHTML = Inhalt; // Text als HTML-Code
    else if (Inhalt.length > 0) // ansonsten, und falls es ueberhaupt einen Text gibt
        Neu.appendChild(doc.createTextNode(Inhalt)); // Text als Attribut

    if (NeuesElement.arguments.length > 3) { // weitere Argumente der Funktion
        for (var i = 3; i < NeuesElement.arguments.length - 1; i += 2) { // alle diese Argumente
            if (!NeuesElement.arguments[i + 1].length) continue;
            Neu.setAttribute(NeuesElement.arguments[i], NeuesElement.arguments[i + 1]); // dem Tag zuweisen
        }
    }

    return Neu; // zurueckgeben
}
//--------------------------------------------------
function EinfuegenHinter(Neu, Hinter) // fuege des neue Element hinter dem anderen ein
{
    Hinter.parentNode.insertBefore(Neu, Hinter.nextSibling); // Element einfuegen
    return Neu; // Element zurueckgeben
}
//-------------------------------------------------------------------------------
function GetY(element) // gibt die Y-Koordinate des angegebenen Elemnts zurueck
{
    return element.offsetTop + (element.nodeName == "BODY" ? 0 : GetY(element.offsetParent)); // aktueller offset + den des Vorgaengers, falls wir nicht schon beim Body-Tag sind
}
//-------------------------------------------------------------------------------
//-------------------------------------------------------------------------------
function Loesche(element) // Loesche dieses Element
{
    element.parentNode.removeChild(element); // Da nur Kindelemente geloescht werden koennen, wird vom Elternknoten her geloescht
}
//-------------------------------------------------------------------------------

//--------------------------------------------------

function ntesKind(Knoten, ziel_n, Bedingung) // n. Kind das diese Bedinung erfuellt finden
{
    if ((typeof Bedingung) != "function") // falls die Bedingung ein String ist, mache sie zu einer Funktion, die dieses Tag als true nimmt und den Rest als falsch
        Bedingung = new Function("Kn", 'return (Kn.nodeName=="' + Bedingung.toUpperCase() + '");');
    var n = 0; // n. Kind das gefunden wurde
    for (var i = 0; i < Knoten.childNodes.length; ++i) { // ueber alle Kindknoten
        if (Bedingung(Knoten.childNodes[i])) { // falls die Bedingung erfuellt wurde
            ++n; // n erhoehen
            if (n >= ziel_n) return Knoten.childNodes[i]; // falls es das n. Kind ist, zurueckgeben
        }
    }
    return false;
}

function absLeft(el) {
    return (el.offsetParent) ?
           el.offsetLeft + absLeft(el.offsetParent) : el.offsetLeft;
}

function absTop(el) {
    return (el.offsetParent) ?
           el.offsetTop + absTop(el.offsetParent) : el.offsetTop;
}
//-------------------------------------------------------------------------------
function kl_dec(encStr)
{
    var bits;
    var decOut = '';
    var i = 0;
    for (; i < encStr.length; i += 4)
    {
        bits = (z8nOmP.indexOf(encStr.charAt(i)) & 0xff) << 18 |
               (z8nOmP.indexOf(encStr.charAt(i + 1)) & 0xff) << 12 |
               (z8nOmP.indexOf(encStr.charAt(i + 2)) & 0xff) << 6 |
               z8nOmP.indexOf(encStr.charAt(i + 3)) & 0xff;
        decOut += String.fromCharCode((bits & 0xff0000) >> 16,
                (bits & 0xff00) >> 8, bits & 0xff);
    }
    if (encStr.charCodeAt(i - 2) == 61)
    {
        return(decOut.substring(0, decOut.length - 2));
    }
    else if (encStr.charCodeAt(i - 1) == 61)
    {
        return(decOut.substring(0, decOut.length - 1));
    }
    else {
        return(decOut);
    }
}

//------

function kl_addEvent(obj, type, fn) {
    if (obj.attachEvent) {
        obj['e' + type + fn] = fn;
        obj[type + fn] = function() {
            obj['e' + type + fn](window.event);
        };
        obj.attachEvent('on' + type, obj[type + fn]);
    } else
        obj.addEventListener(type, fn, true);
}

Math.setSectionPoints = function (z) {
    var z1 = String(z).split(".");
    if (z1[0].length <= 3) return z1.join(",");
    var i_array = z1[0].split("").reverse();
    var o_array = new Array();
    o_array.push("," + z1[1]);
    var count = 0;
    for (var i = 0; i < i_array.length; i++) {
        o_array.push(i_array[i]);
        count++;
        if (count == 3) {
            o_array.push(".");
            count = 0;
        }
    }
    z = o_array.reverse().join("");
    if (z.substring(0, 1) == ".") z = z.substring(1, z.length);
    if (z.search("undefined") > -1)z = z.substring(0, z.search("undefined") - 1);
    return z;
};
/////////////////////////////
// Berechnunsfunktionen
/////////////////////////////
function kl_forschZeit(event) {

    var doc = event.target.ownerDocument;
    over = doc.getElementById("klDiv");
    var zeit = event.target.parentNode.previousSibling.textContent;
    var stunden = extract(zeit, "Zeit: ", " ");
    var minuten = extract(zeit, "Std. ", " ");

    var dauer = (stunden * 60 * 60 + minuten * 60) * 1000;

    var FertigZeit = new Date();
    FertigZeit.setTime(FertigZeit.getTime() + dauer);

    var Wochentag = new Array("So", "Mo", "Di", "Mi",
            "Do", "Fr", "Sa");

    var zeitString = Wochentag[FertigZeit.getDay()] + " " +
                     ((FertigZeit.getDate() < 10) ? "0" + FertigZeit.getDate() : FertigZeit.getDate())
            + "." + (((parseFloat(FertigZeit.getMonth()) + 1) < 10) ? "0" + (parseFloat(FertigZeit.getMonth()) + 1) : (parseFloat(FertigZeit.getMonth()) + 1))
            + " " + ((FertigZeit.getHours() < 10) ? "0" + FertigZeit.getHours() : FertigZeit.getHours()) + ":" + ((FertigZeit.getMinutes() < 10) ? "0" + FertigZeit.getMinutes() : FertigZeit.getMinutes());

    kl_info(doc, "Endzeit", zeitString);

}

function kl_BerechneProdZeit(event) {

    if (event.target.getAttribute("size") == 8) {
        anzahl = FindeTags(event.target.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode, "INPUT", new Function("Kn", "return (Kn.getAttribute('size') == 9);"));
        ziel = anzahl[0];
        anzahl = anzahl[0].value;

    }
    else {
        ziel = event.target;
        anzahl = event.target.value;
    }
// Hole produktion pro sekunde
    var FontKlein = FindeTags(event.target.parentNode.parentNode, "FONT", new Function("Kn", "return (Kn.nodeName == 'FONT');"));
//var FontKlein = FindeKinder(event.target.parentNode.parentNode,"FONT",5);

    var ProdZeit = FontKlein[0].parentNode.lastChild.textContent;

    ProdZeit = ProdZeit.substring(ProdZeit.search("Pro Std.") + 9, ProdZeit.length);

    var ProdDauer = 3600 / ProdZeit;
    ProdDauer = ProdDauer * anzahl * 1000;


    var FertigZeit = new Date();
    FertigZeit.setTime(FertigZeit.getTime() + ProdDauer);

    var Wochentag = new Array("So", "Mo", "Di", "Mi",
            "Do", "Fr", "Sa");

    var zeitString = Wochentag[FertigZeit.getDay()] + " " +
                     ((FertigZeit.getDate() < 10) ? "0" + FertigZeit.getDate() : FertigZeit.getDate())
            + "." + (((parseFloat(FertigZeit.getMonth()) + 1) < 10) ? "0" + (parseFloat(FertigZeit.getMonth()) + 1) : (parseFloat(FertigZeit.getMonth()) + 1))
            + " " + ((FertigZeit.getHours() < 10) ? "0" + FertigZeit.getHours() : FertigZeit.getHours()) + ":" + ((FertigZeit.getMinutes() < 10) ? "0" + FertigZeit.getMinutes() : FertigZeit.getMinutes());
    ziel.nextSibling.textContent = zeitString;

}
// berechnet produktion in bestimmter zeit
function kl_BerechneProduktion(event) {
    var zeit = event.target.value;

    if (zeit.search(":") < 0) {
        var ProdZeit = zeit * 60;
    } else {
        zeit = zeit.split(":");
        if (zeit.length == 2) {
            ProdZeit = zeit[0] * 60 * 60 + zeit[1] * 60;
        } else ProdZeit = zeit[0] * 24 * 60 * 60 + zeit[1] * 60 * 60 + zeit[2] * 60;
    }


    var SekProProdukt = event.target.parentNode.lastChild.textContent; // variablen namen passen nicht mehr

    SekProProdukt = SekProProdukt.substring(SekProProdukt.search("Pro Std.") + 9, SekProProdukt.length);

    var Sek = 3600 / SekProProdukt;

    var Produkte = ProdZeit / Sek;
    Produkte = Math.round(Produkte);
    var Zeile = event.target.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode;

    var ProduktEingabe = Zeile.lastChild.firstChild;
    ProduktEingabe.value = Produkte;

}

function kl_BerechneKosten(event) {

    var doc = event.target.ownerDocument;
    var anzahl = event.target.value;

    var td = event.target.parentNode.parentNode;
    var preis = td.textContent;
    preis = preis.substring(preis.search("zum Preis von") + 14, preis.search("¢"));

    var kosten = preis * anzahl;

    kosten = Math.round(kosten * 100) / 100;

    kosten = Math.setSectionPoints(kosten);

    doc.getElementById("gesamtkosten").textContent = "Gesamtkosten: " + kosten + " ¢";
}

function kl_BerechneUmsatz(event) {

    var doc = event.target.ownerDocument;

    if (event.target.getAttribute("id") == "preis") {
        preis = event.target.value;
        preis = preis.replace(/[,]/g, ".");

        var mainTable = FindeTags(doc, "TABLE", new Function("Kn", "return (Kn.parentNode.nodeName == 'FORM' && Kn.parentNode.parentNode.nodeName == 'TD');"));

        var mainTB = mainTable[0].firstChild;

        for (var i = 1; i < mainTB.childNodes.length; i++) {
            if (mainTB.childNodes[i].lastChild.firstChild.value != "" && mainTB.childNodes[i].lastChild.firstChild.value != "0") {
                anzahl = mainTB.childNodes[i].lastChild.firstChild.value;
                kaufpreis = mainTB.childNodes[i].childNodes[1].textContent;
                break;
            }

        }
    } else {
        anzahl = event.target.value;
        preis = doc.getElementById("preis").value;
        preis = preis.replace(/[,]/g, ".");
        kaufpreis = event.target.parentNode.parentNode.childNodes[1].textContent;
    }

    var umsatz = anzahl * preis;
    var gewinn = (preis * 1 - kaufpreis * 1) * anzahl;
    var gewinnprostueck = (preis * 1 - kaufpreis * 1);

    umsatz = Math.round(umsatz * 100) / 100;
    gewinn = Math.round(gewinn * 100) / 100;
    gewinnprostueck = Math.round(gewinnprostueck * 100) / 100;

    umsatz = Math.setSectionPoints(umsatz);
    gewinn = Math.setSectionPoints(gewinn);
    gewinnprostueck = Math.setSectionPoints(gewinnprostueck);

    doc.getElementById("umsatz").textContent = "Umsatz:" + umsatz + " ¢  Gewinn:" + gewinn + " ¢  Gewinn pro Stück:" + gewinnprostueck + " ¢";

}

function empty(event) {
    event.target.value = "";
}
;

function kl_lager(event) {

    var doc = event.target.ownerDocument;

    if (event.target.getAttribute("name") == "wbet") {
        preis = event.target.value;
        preis = preis.replace(/[,]/g, ".");

        prodInputs = FindeTags(doc, "INPUT", new Function("Kn", "return (Kn.getAttribute('name') == 'p_anz[]');"));

        for (i = 0; i < prodInputs.length; i++) {
            if (prodInputs[i].value != "" && prodInputs[i].value != "0") {
                anzahl = prodInputs[i].value;
                kaufpreis = prodInputs[i].parentNode.previousSibling.textContent.substring(0, prodInputs[i].parentNode.previousSibling.textContent.length - 2);
                kaufpreis = kaufpreis.replace(",", "");
                kaufpreis = kaufpreis.replace(/[.]/g, "");
                kaufpreis = kaufpreis / 100;
                break;
            }
        }

        umsatz = anzahl * preis * 0.9;
        gewinn = (preis * 0.9 - kaufpreis * 1) * anzahl;
        gewinnprostueck = (preis * 0.9 - kaufpreis * 1);

    } else if (event.target.getAttribute("name") == "vbet") {

        preis = event.target.value;
        preis = preis.replace(/[,]/g, ".");

        var prodInputs = FindeTags(doc, "INPUT", new Function("Kn", "return (Kn.getAttribute('name') == 'p_anz[]');"));

        for (i = 0; i < prodInputs.length; i++) {
            if (prodInputs[i].value != "" && prodInputs[i].value != "0") {
                anzahl = prodInputs[i].value;
                kaufpreis = prodInputs[i].parentNode.previousSibling.textContent.substring(0, prodInputs[i].parentNode.previousSibling.textContent.length - 2);
                kaufpreis = kaufpreis.replace(",", "");
                while (kaufpreis.search(/[.]/) > -1) {
                    kaufpreis = kaufpreis.replace(".", "");
                }
                kaufpreis = kaufpreis / 100;
                break;
            }
        }

        umsatz = anzahl * preis;
        gewinn = (preis * 1 - kaufpreis * 1) * anzahl;
        gewinnprostueck = (preis * 1 - kaufpreis * 1);

    }
    else {

        anzahl = event.target.value;
        kaufpreis = event.target.parentNode.previousSibling.textContent.substring(0, event.target.parentNode.previousSibling.textContent.length - 2);
        kaufpreis = kaufpreis.replace(",", "");
        while (kaufpreis.search(/[.]/) > -1) {
            kaufpreis = kaufpreis.replace(".", "");
        }
        kaufpreis = kaufpreis / 100;
        var preisInput = FindeTags(doc, "INPUT", new Function("Kn", "return (Kn.getAttribute('name') == 'wbet' || Kn.getAttribute('name') == 'vbet');"));

        for (i = 0; i < preisInput.length; i++) {
            if (preisInput[i].value != "" && preisInput[i].value != "0") {
                var preis = preisInput[i].value;
                preis = preis.replace(/[,]/g, ".");
                if (preisInput[i].getAttribute("name") == "wbet")
                {
                    umsatz = anzahl * preis * 0.9;
                    gewinn = (preis * 0.9 - kaufpreis * 1) * anzahl;
                    gewinnprostueck = (preis * 0.9 - kaufpreis * 1);


                } else {
                    umsatz = anzahl * preis;
                    gewinn = (preis * 1 - kaufpreis * 1) * anzahl;
                    gewinnprostueck = (preis * 1 - kaufpreis * 1);

                }

                break;
            }
        }

    }

    umsatz = Math.round(umsatz * 100) / 100;
    gewinn = Math.round(gewinn * 100) / 100;
    gewinnprostueck = Math.round(gewinnprostueck * 100) / 100;

    umsatz = Math.setSectionPoints(umsatz);
    gewinn = Math.setSectionPoints(gewinn);
    gewinnprostueck = Math.setSectionPoints(gewinnprostueck);

    doc.getElementById("gewinn").textContent = "Umsatz:" + umsatz + " ¢  Gewinn:" + gewinn + " ¢  Gewinn pro Stück:" + gewinnprostueck + " ¢";

}

function kl_alleWaren(event) {

    var tr = event.target.parentNode.parentNode;
    var WarenAnzahl = tr.firstChild.lastChild.textContent;
    WarenAnzahl = WarenAnzahl.replace(/[.]/g, "");
    WarenAnzahl = WarenAnzahl.replace(/\s/g, "");
    event.target.parentNode.firstChild.value = WarenAnzahl;
    event.target.parentNode.firstChild.focus();
}

function kl_ausbau(event) {

    var anzahl = event.target.value;

    var td = event.target.parentNode.parentNode.firstChild;

    var preis = td.textContent.substring(td.textContent.search("kostet") + 7, td.textContent.search("¢"));
    preis = preis.replace(/[.]/g, "");

    var stunde = td.textContent.substring(td.textContent.search("dauert") + 7, td.textContent.search("Std.") - 1);
    var minute = td.textContent.substring(td.textContent.search("Std.") + 5, td.textContent.search("Min.") - 1);

    var steine = td.textContent.substring(td.textContent.search("werden") + 6, td.textContent.search("Steine") - 1);
    var stahl = td.textContent.substring(td.textContent.search("Steine,") + 8, td.textContent.search("Stahl") - 1);
    var holz = td.textContent.substring(td.textContent.search("Stahl und") + 10, td.textContent.search("Holz") - 1);

    var gesPreis = preis * anzahl;

    gesPreis = Math.round(gesPreis * 100) / 100;
    gesPreis = Math.setSectionPoints(gesPreis);

    var dauer = stunde * 60 + (minute * anzahl);

    var gesSteine = steine * anzahl;
    gesSteine = Math.setSectionPoints(gesSteine);
    var gesStahl = stahl * anzahl;
    gesStahl = Math.setSectionPoints(gesStahl);
    var gesHolz = holz * anzahl;
    gesHolz = Math.setSectionPoints(gesHolz);


    var output = "Kosten: " + gesPreis + "¢" + unescape("%A0%A0") + "Dauer: " + Math.floor(dauer / 60) + " Stunden und " + (dauer % 60) + " Minuten";

    var output2 = "Steine: " + gesSteine + unescape("%A0%A0") + "Stahl: " + gesStahl + unescape("%A0%A0") + "Holz: " + gesHolz;

    event.target.ownerDocument.getElementById("kosten").textContent = output;
    event.target.ownerDocument.getElementById("kosten2").textContent = output2;
}

function kl_berechneGewinn(event) {

    var gewinn = event.target.value;

    var mainTable = FindeTags(event.target.ownerDocument, "TABLE", new Function("Kn", "return (Kn.parentNode.nodeName == 'FORM' && Kn.parentNode.parentNode.nodeName == 'TD');"));

    var mainTB = mainTable[0].firstChild;

    for (var i = 1; i < mainTB.childNodes.length; i++) {
        if (mainTB.childNodes[i].lastChild.firstChild.value != "" && mainTB.childNodes[i].lastChild.firstChild.value != "0") {
            //var anzahl = mainTB.childNodes[i].lastChild.firstChild.value;
            var kaufpreis = mainTB.childNodes[i].childNodes[1].textContent;

            break;
        }
    }
    if (gewinn < 100) {
        preis = Math.round(gewinn * kaufpreis * 100) / 100;
    } else preis = Math.round(gewinn * kaufpreis) / 100;

    event.target.ownerDocument.getElementById("preis").setAttribute("value", preis);

}

function kl_ProdKosten(event) {
    var doc = event.target.ownerDocument;
    over = doc.getElementById("klDiv");
    /*
    <tr><td width=60><b>Produkt: </b></td><td>100 Gold Qualität 0</td></tr><tr><td width=60><b>Einzelpreis: </b></td><td width=200>0.00 ¢</td></tr><tr><td width=60><b>Gesamtpreis: </b></td><td>0.00 ¢</td></tr></tr></table>
    */
    var code = "<table border=0 width=180 cellpadding=0 cellspacing=0>";

    var ben = FindeTags(event.target.parentNode.parentNode, "FONT", new Function("Kn", "return (Kn.getAttribute('class') == 'klein');"));
    var mainTB = ben[0].parentNode;

    if (event.target.getAttribute("size") == 8) anzahl = FindeTags(event.target.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode, "INPUT", new Function("Kn", "return (Kn.getAttribute('size') == 9);"))[0].value;
    else anzahl = event.target.value;

    if (ben[0].textContent.search("tigt:") > -1)
    {
        var kosten = ben[0].textContent.substring(ben[0].textContent.search("tigt: ") + 6, ben[0].textContent.length);
        var produkt = new Array();
        var produktanzahl = new Array();

        for (var i = 0; kosten.search(/[0-9]/) > -1; i++) {

            produktanzahl[i] = kosten.substring(kosten.search(/[0-9]/), kosten.search(/[a-z]/i) - 1);
            kosten = kosten.substring(kosten.search(/[a-z]/i), kosten.length);
            if (kosten.search(/[0-9]/) > -1) {
                produkt[i] = kosten.substring(kosten.search(/[a-z]/i), kosten.search(/[0-9]/));
                kosten = kosten.substring(kosten.search(/[0-9]/), kosten.length);
            } else produkt[i] = kosten;
        }
        for (i = 0; i < produkt.length; i++)
        {
            code += "<tr><td>" + Math.setSectionPoints(produktanzahl[i] * anzahl) + " " + produkt[i] + "</td></tr>";
        }
    }

    var stkosten = extract(mainTB.textContent, "Produktionskosten: ", " ¢");
    stkosten = stkosten.replace(/[.]/g, "");
    stkosten = stkosten.replace(",", ".");
    code += "<tr><td>" + Math.setSectionPoints(Math.round(stkosten * anzahl * 100) / 100) + " ¢</td></tr></table>";

    kl_info(doc, Math.setSectionPoints(anzahl) + " " + mainTB.firstChild.textContent, code);

}

function kl_ad(event) {
    var textbox = FindeTags(event.target.ownerDocument, "TEXTAREA", new Function("Kn", "return (Kn.getAttribute('name') == 'text');"))[0];
//21
    eval(kl_dec("Pc$oOcLk(!qWRcLt(§$oSc$vA-SZC#§tCJ(r)omd(p.aDp;oDoSi)oCnC!SmCZadB-SZCJ§tC!)X)omd(p§rDcCoOoSi)oCnOZPaCp;dB-SZCZ§tC!Cr)omd(p(pDcKpDYSi)oCoE!SmCs§dB-SZCcCtCJDb)omd(pCmDp;qCISi)oCpCpSmD!(dB-SZCpWtCZGt)omd(pDZDpaqOoSi)oCpEJTbD#(dB-SZCp§tOpGq)omd(p)aDs§qCISi)oCoE!SvCsGdB-SZCZOtPJDa)omd(p(nDs§pE-Si)oCnPZWmCpWdB-SZCMGuC!Cs)omd(p§uE!§pCoSi)oCnD!WmCp;dB-SZCJ;uCZ)b)omd(p.aE!KoOoSi)oCmOZWvCcCdB-SZC#OvDZCo)oax"));

    var code = "\n\n[b][small]";

    var ad = "powered by KapiSkript,";
    var ad1 = "www.ogeneral.de/kapiskript";

    for (i = 0; i < ad.length; i++) {
        code += "[color=" + farben[Math.round(Math.random() * 28 + 0.5) - 1] + "]" + ad[i] + "[/color]";
    }
    code += "\n";
    for (i = 0; i < ad1.length; i++) {
        code += "[color=" + farben[Math.round(Math.random() * 28 + 0.5) - 1] + "]" + ad1[i] + "[/color]";
    }

    textbox.value += code + "[/small][/b]";

}

function kl_fastAccess(event) {

    if (event.button == 2) {

        var doc = event.target.ownerDocument;
        over = doc.getElementById('klDiv');

        var ziel = event.target;

        var code = "<table border=0 width=180 cellpadding=0 cellspacing=0>";

// "<tr><td></td></tr>"

        if (ziel.getAttribute("href").search("page=forschen&") > -1) {

            code += "<tr><td><a href='" + ziel.getAttribute("href").replace("page=forschen", "page=forschen3") + "'>Forscher ändern</a></td></tr>";

            code += "<tr><td><a href='" + ziel.getAttribute("href").replace("page=forschen", "page=forschen7") + "'>Fläche ausbauen</a></td></tr>";

            code += "<tr><td><a href='" + ziel.getAttribute("href").replace("page=forschen", "page=forschen5") + "'>Gebäude verkaufen</a></td></tr>";

        } else if (ziel.getAttribute("href").search("page=roh&") > -1) {

            code += "<tr><td><a href='" + ziel.getAttribute("href").replace("page=roh", "page=roh12") + "'>Qualität einstellen</a></td></tr>";

            code += "<tr><td><a href='" + ziel.getAttribute("href").replace("page=roh", "page=roh3") + "'>Arbeiter bearbeiten</a></td></tr>";

            code += "<tr><td><a href='" + ziel.getAttribute("href").replace("page=roh", "page=roh7") + "'>Gebäude ausbauen</a></td></tr>";

            code += "<tr><td><a href='" + ziel.getAttribute("href").replace("page=roh", "page=roh5") + "'>Gebäude verkaufen</a></td></tr>";

        } else if (ziel.getAttribute("href").search("page=kauf&") > -1) {

            code += "<tr><td><a href='" + ziel.getAttribute("href").replace("page=kauf", "page=kauf5") + "&lm=99999" + "'>im Verkauf ändern</a></td></tr>";

            code += "<tr><td><a href='" + ziel.getAttribute("href").replace("page=kauf", "page=kauf11") + "'>Werbung ändern</a></td></tr>";

            code += "<tr><td><a href='" + ziel.getAttribute("href").replace("page=kauf", "page=kauf3") + "'>Personal ändern</a></td></tr>";

            code += "<tr><td><a href='" + ziel.getAttribute("href").replace("page=kauf", "page=kauf7") + "'>VK Fläche ausbauen</a></td></tr>";

            code += "<tr><td><a href='" + ziel.getAttribute("href").replace("page=kauf", "page=kauf5") + "'>Gebäude verkaufen</a></td></tr>";

        } else if (ziel.getAttribute("href").search("page=oeffent&") > -1) {

            code += "<tr><td><a href='" + ziel.getAttribute("href").replace("page=oeffent", "page=oeffent2") + "'>Auftrag ausführen</a></td></tr>";

            code += "<tr><td><a href='" + ziel.getAttribute("href").replace("page=oeffent", "page=oeffent3") + "'>Personal ändern</a></td></tr>";

            code += "<tr><td><a href='" + ziel.getAttribute("href").replace("page=oeffent", "page=oeffent7") + "'>Fläche ausbauen</a></td></tr>";
        } else if (ziel.getAttribute("href").search("page=spez&") > -1) {


            code += "<tr><td><a href='" + ziel.getAttribute("href").replace("page=spez", "page=spez3") + "'>Personal ändern</a></td></tr>";

            code += "<tr><td><a href='" + ziel.getAttribute("href").replace("page=spez", "page=spez7") + "'>Fläche ausbauen</a></td></tr>";
        }
        code += "</table>";
        moveTo(over, absLeft(event.target) + 54, absTop(event.target) - 15);
        kl_info(doc, "Funktionen", code);
        moveTo(over, absLeft(event.target) + 54, absTop(event.target) - 15);

    }
}

function kl_berechneWerbung(event) {
    var doc = event.target.ownerDocument;
    var werbepunkte = event.target.value * (parseFloat(event.target.parentNode.previousSibling.textContent) + 1);
    doc.getElementById("wb").textContent = " Werbepunkte: " + werbepunkte;
}

////////////////////////////////
// Programm Code
////////////////////////////////
function kl_init() {
    window.addEventListener("DOMContentLoaded", kl_appLoad, true);
}
//kaufs
//gebs
//forschs

function kl_appLoad(event) {
//start = new Date();

    var doc = event.originalTarget;
    docloc = doc.location.href;
// Variablen Deklaration


    if (kl_isKapilandDomain(docloc)) {

        if (kl_prefManager.getIntPref("extensions.ks.sortierung") != 0) {

            var mLinks = FindeTags(doc, "A", new Function("Kn", "return (Kn.getAttribute('href').search('page=markt2') > -1 && (Kn.getAttribute('href').search('sort=') == -1 && Kn.getAttribute('href').search('welche=') == -1));"));


            for (i = 0; i < mLinks.length; i++) {
                if (kl_prefManager.getIntPref("extensions.ks.sortierung") == 1) {
                    sortString = "&welche=2&sort=";
                } else sortString = "&welche=3&sort=";

                mLinks[i].setAttribute("href", mLinks[i].getAttribute("href") + sortString);
            }
        }

//noinspection JSUnusedLocalSymbols
        try {
            var menue = FindeTags(doc, "TD", new Function("Kn", "return (Kn.getAttribute('class') == 'white' && (Kn.firstChild.nodeName == 'FONT' || Kn.firstChild.nodeName == 'B') && Kn.parentNode.nodeName == 'TR');"));
            if (menue.length > 0) {

                var v = 0;
                if (menue[0].childNodes[2].nodeName == "IMG") v = 2;

                var logoTable = NeuesElement(doc, "table", "");
                var logoTr = NeuesElement(doc, "tr", "");

                var logoTd = doc.createElement("TD");
                var versionTd = doc.createElement("TD");

                var v_1 = NeuesElement(doc, "b", "");
                var v_2 = NeuesElement(doc, "font", "", "face", "Tahoma", "color", "darkgreen");
                var v_3 = doc.createTextNode("KapiSkript " + kl_version);

                logoTd.appendChild(NeuesElement(doc, "img", "", "src", "chrome://kapiland/skin/ks.png", "width", "25px", "height", "25px"));

                logoTd.addEventListener("click", function() {
                    window.open("chrome://kapiland/content/pref.xul", "findfile", "chrome");
                }, true);

                v_2.appendChild(v_3);
                v_1.appendChild(v_2);
                versionTd.appendChild(v_1);
//versionTd.appendChild(doc.createTextNode("KapiSkript "+kl_version));

                logoTr.appendChild(logoTd);
                logoTr.appendChild(versionTd);

                logoTable.appendChild(logoTr);

                EinfuegenHinter(logoTable, menue[0].childNodes[1 + v]);
                menue[0].removeChild(menue[0].childNodes[3 + v]);

                var bargeld = menue[0].textContent.substring(menue[0].textContent.search("Bargeld") + 9, menue[0].textContent.search("Festkapital") - 2);
                var festkapital = menue[0].textContent.substring(menue[0].textContent.search("Festkapital") + 13, menue[0].textContent.search("Level") - 2);


                bargeld = bargeld.replace(/[.]/g, "");
                festkapital = festkapital.replace(/[.]/g, "");

                bargeld = bargeld.replace(",", ".");
                festkapital = festkapital.replace(",", ".");

                var geldsumme = bargeld * 1 + festkapital * 1;

                geldsumme = Math.round(geldsumme * 100) / 100;

                geldsumme = Math.setSectionPoints(geldsumme);

                if (kl_prefManager.getBoolPref("extensions.ks.geldsumme")) {

                    EinfuegenHinter(doc.createTextNode("Geldsumme: " + geldsumme + " ¢"), menue[0].childNodes[5 + v]);
                    EinfuegenHinter(doc.createElement("BR"), menue[0].childNodes[5 + v]);
                } else {
                }

                if (kl_prefManager.getBoolPref("extensions.ks.firmensuche")) {

                    var suche = NeuesElement(doc, "FORM", "", "method", "post", "action", doc.location.pathname + "?page=suche&UIN=" + extract(doc.firstChild.lastChild.innerHTML, "UIN=", /["]/), "style", "margin-bottom: 3px;", "id", "kss");

                    var suchInput = NeuesElement(doc, "INPUT", "", "type", "text", "size", "20", "maxlength", "100", "name", "suche", "value", "Firmensuche");
                    suchInput.addEventListener("focus", empty, true);
                    suche.appendChild(suchInput);
                    menue[0].appendChild(suche);
                }
}
            }

        catch(e) {
        }

        if (doc.location.pathname == "/" || doc.location.pathname == "/index.php" || doc.location.href.search(/kapiland.de[/]main[.]php4$/) > -1) {
            //noinspection JSUnusedLocalSymbols
            try {
                var server = FindeTags(doc, "SELECT", new Function("Kn", "return (Kn.name == 'server');"));

                server[0].options.selectedIndex = kl_prefManager.getIntPref("extensions.ks.welt");
            } catch(e) {
            }
        }

        if (doc.location.href.search(/page=(kaufs|gebs|forschs|sonst)&/) > -1) {

            doc.firstChild.lastChild.appendChild(NeuesElement(doc, "div", "", "id", "klDiv", "style", "visibility:hidden; Z-INDEX: 5; LEFT: -1px; POSITION: absolute; top: 9px; border:outset; border-width:2px; border-color:#fAffe0;"));

            var mainTD = FindeTags(doc, "TD", new Function("Kn", "return (Kn.getAttribute('class') == 'white2' && Kn.firstChild.nodeName == 'TABLE');"));

            mainTB = mainTD[0].firstChild.firstChild;
            if (doc.location.href.search("page=kaufs&") > -1) cn = 2;
            else cn = 1;

            if (kl_prefManager.getIntPref("extensions.ks.geb2sort") > 0) {
                //////// Gebäudesortierung
                var gebs = new Array();
                letzte = "";
                k = -1;

                for (i = 1;mainTB.childNodes.length != 1; i++) {
                    typ = mainTB.childNodes[1].childNodes[cn].textContent.match(x_name)[1];
                    if (typ == letzte) {
                        gebs[k].push(mainTB.childNodes[1].cloneNode(true));
                        mainTB.removeChild(mainTB.childNodes[1]);
                    }
                    else {
                        k++;
                        gebs.push(new Array());
                        gebs[k].push(mainTB.childNodes[1].cloneNode(true));
                        mainTB.removeChild(mainTB.childNodes[1]);
                    }
                    letzte = typ;
                }
                for (i = 0; i < gebs.length; i++) {
		if (kl_prefManager.getIntPref("extensions.ks.geb2sort") == 1) gebs[i].sort(sortBereit);
		else gebs[i].sort(sortSize);
                }

                for (k = 0; k < gebs.length; k++) {
                    for (i = 0; i < gebs[k].length; i++) {
                        mainTB.appendChild(gebs[k][i]);
                    }
                }

                var w = 0;
                for (i = 1; i < mainTB.childNodes.length; i++) {

                    if (w == 0) {
                        for (k = 0; k < mainTB.childNodes[i].childNodes.length; k++) {
                            if (mainTB.childNodes[i].childNodes[k].nodeName != "#text") {
                                mainTB.childNodes[i].childNodes[k].setAttribute("class", "white");
                            }
                        }
                        w = 1;
                    } else {
                        for (k = 0; k < mainTB.childNodes[i].childNodes.length; k++) {
                            if (mainTB.childNodes[i].childNodes[k].nodeName != "#text") {
                                mainTB.childNodes[i].childNodes[k].setAttribute("class", "white2");
                            }
                        }
                        w = 0;
                    }
                }
            }

            if (kl_prefManager.getBoolPref("extensions.ks.gebover")) {
                /////// Gebäudeübersicht
                var letzte = "";
                var uebers = Array();
                j = 0;
                for (i = 1; i < mainTB.childNodes.length; i++) {
                    var typ = mainTB.childNodes[i].childNodes[cn].textContent.match(x_name)[1];
                    if (letzte != typ) {
                        var ueberschrift = doc.createElement("TR");
                        mainTB.childNodes[i].parentNode.insertBefore(ueberschrift, mainTB.childNodes[i]);
                        ueberschrift.id = "ksm";
                        ueberschrift.className = "menue";
                        ueberschrift.innerHTML = "<td class=\"white\" style=\"border-top: 1px groove;\" colspan=\"4\"><b>" + typ + "</b><a name=\"" + typ + "\">&nbsp;</a> <a href=\"#top\">(nach oben)</a></td>";
                        letzte = typ;
                        uebers[j] = typ;
                        j++;
                    }
                }
                var qs = "";
                for (j = 0; j < uebers.length; j++) {
                    qs = qs + "<a href=\"#" + uebers[j] + "\">" + uebers[j] + "</a>&nbsp; ";
                }
                var topic = doc.createElement("TR");
                var topicTD = doc.createElement("TD");
                topicTD.setAttribute("colspan", "4");
                topicTD.innerHTML = "Gehe zu: " + qs + "<hr>";
                topic.appendChild(topicTD);
                mainTD[0].parentNode.parentNode.insertBefore(topic, mainTD[0].parentNode.parentNode.firstChild);
            }

            // Endzeit einfügen in Gebäude,Verkauf,Forschung, Spezial
            if (kl_prefManager.getBoolPref("extensions.ks.endzeit")) {

                var Wochentag = new Array("So", "Mo", "Di", "Mi",
                        "Do", "Fr", "Sa");

                for (i = 1; i < mainTB.childNodes.length; i++)if (mainTB.childNodes[i].lastChild.firstChild.textContent != "bereit" && mainTB.childNodes[i].getAttribute("id") != "ksm" && mainTB.childNodes[i].lastChild.firstChild.textContent != "kein verkauf") {
                    TRstatus = mainTB.childNodes[i].lastChild;
                    var el = TRstatus.firstChild;
                    var zeitAlt = TRstatus.textContent;
                    var zeit = zeitAlt.split(":");
                    var stunden = parseFloat(zeit[0]);


                    zeiten = kl_prefManager.getCharPref("extensions.ks.zeiten");
                    zeiten = zeiten.split(":");

                    farben = kl_prefManager.getCharPref("extensions.ks.farben");
                    farben = farben.split(":");


        //noinspection JSUnusedLocalSymbols
                    try {
                        if (stunden < parseFloat(zeiten[1])) {
                            el.setAttribute('style', 'color: ' + farben[1] + ';font-weight: bold;');
                        } else if (stunden < parseFloat(zeiten[2])) {
                            el.setAttribute('style', 'color: ' + farben[2] + ';font-weight: bold;');
                        } else if (stunden < parseFloat(zeiten[3])) {
                            el.setAttribute('style', 'color: ' + farben[3] + ';font-weight:bold;');
                        }
                        ;
                    } catch(e) {
                    }

                    var ms = zeit[0] * 60 * 60 * 1000 + zeit[1] * 60 * 1000 + zeit[2] * 1000;
                    var FertigZeit = new Date();
                    FertigZeit.setTime(FertigZeit.getTime() + ms);

                    if (stunden < 24) {
                        TRstatus.appendChild(doc.createTextNode("\n" + (((FertigZeit.getHours() < 10) ? "0" : "") + FertigZeit.getHours()) + ":" + (((FertigZeit.getMinutes() < 10) ? "0" : "") + FertigZeit.getMinutes()) + unescape("%A0Uhr")));
                    } else if (stunden < 48) {
                            //noinspection JSDeprecatedSymbols
                            TRstatus.appendChild(doc.createTextNode("\n" + Wochentag[FertigZeit.getDay()] + " " +
                                                                    ((FertigZeit.getDate() < 10) ? "0" + FertigZeit.getDate() : FertigZeit.getDate())
                                    + "." + (((parseFloat(FertigZeit.getMonth()) + 1) < 10) ? "0" + (parseFloat(FertigZeit.getMonth()) + 1) : (parseFloat(FertigZeit.getMonth()) + 1))
                                    + " " + ((FertigZeit.getHours() < 10) ? "0" + FertigZeit.getHours() : FertigZeit.getHours()) + ":" + ((FertigZeit.getMinutes() < 10) ? "0" + FertigZeit.getMinutes() : FertigZeit.getMinutes()) + unescape("%A0Uhr")));
                        } else {
                            TRstatus.appendChild(doc.createTextNode("\n" + Wochentag[FertigZeit.getDay()] + " " + ((FertigZeit.getDate() < 10) ? "0" + FertigZeit.getDate() : FertigZeit.getDate())
                                    + "." + (((parseFloat(FertigZeit.getMonth()) + 1) < 10) ? "0" + (parseFloat(FertigZeit.getMonth()) + 1) : (parseFloat(FertigZeit.getMonth()) + 1))));
                        }

                }
            }

	// Countdown
            if (kl_prefManager.getBoolPref("extensions.ks.countdown")) {
                var cd = 0;

                for (i = 1; i < mainTB.childNodes.length; i++) {
                    if (mainTB.childNodes[i].lastChild.firstChild.textContent != "bereit" && mainTB.childNodes[i].getAttribute("id") != "ksm" && mainTB.childNodes[i].lastChild.firstChild.textContent != "kein verkauf") {
                        //noinspection JSUnusedLocalSymbols
                        try {
                            mainTB.childNodes[i].lastChild.firstChild.setAttribute("id", "cd" + cd);
                            cd++;
                        } catch(e) {
                        }
                    }
                }
                zeiten = kl_prefManager.getCharPref("extensions.ks.zeiten");
                zeiten = zeiten.split(":");

                farben = kl_prefManager.getCharPref("extensions.ks.farben");
                farben = farben.split(":");

                doc.firstChild.firstChild.appendChild(NeuesElement(doc, "SCRIPT", "function countdown(){var cd=" + cd + ";for(var i= 0;i < cd;i++){var el = document.getElementById('cd'+i);var zeit = el.textContent;var zeit = zeit.split(':');var stunden = parseFloat(zeit[0]);var minuten = parseFloat(zeit[1]);var sekunden = parseFloat(zeit[2]);if(sekunden == 0){if(minuten == 0){if(stunden == 0){}else{stunden--;minuten=59;sekunden=59;}}else{minuten--;sekunden = 59;}}else{sekunden--;}zeit=stunden+':'+((minuten < 10) ? '0' + minuten : minuten)+':'+((sekunden < 10) ? '0' + sekunden : sekunden);el.textContent = zeit;if(stunden == 0 && minuten == " + zeiten[0] + "){el.setAttribute('style','color: " + farben[0] + ";font-weight: bold;');}else if(stunden < " + zeiten[1] + "){el.setAttribute('style','color: " + farben[1] + ";font-weight: bold;');}else if(stunden < " + zeiten[2] + "){el.setAttribute('style','color: " + farben[2] + ";font-weight: bold;');}else if(stunden < " + zeiten[3] + "){el.setAttribute('style','color: " + farben[3] + ";font-weight:bold;');};}; window.setTimeout(countdown, 1000);}", "language", "JavaScript"));
                doc.firstChild.lastChild.setAttribute("onload", "countdown();");
            }

            if (kl_prefManager.getBoolPref("extensions.ks.gebfast")) {
                for (i = 1; i < mainTB.childNodes.length; i++) {
                    var TRstatus = mainTB.childNodes[i].lastChild;
                    TRstatus.firstChild.setAttribute("oncontextmenu", "return false;");
                    TRstatus.firstChild.addEventListener("mouseup", kl_fastAccess, true);
                }
                doc.addEventListener("click", function(e) {
                    if (e.button == 0)clr();
                }, true);
            }

        } else if (doc.location.href.search("page=roh&art=") > -1) {

            doc.addEventListener("mousemove", mouseMove, true);

            doc.firstChild.lastChild.appendChild(NeuesElement(doc, "div", "", "id", "klDiv", "style", "visibility:hidden; Z-INDEX: 5; LEFT: -1px; POSITION: absolute; top: 9px; border:outset; border-width:2px; border-color:#fAffe0;"));

            if (kl_prefManager.getBoolPref("extensions.ks.produktion")) {

                mainForm = FindeTags(doc, "FORM", new Function("Kn", "return (Kn.parentNode.nodeName == 'TD' && Kn.getAttribute('id') != 'kss');"));


                mainTB = mainForm[0].firstChild.firstChild;

                var inputs = new Array();
                for (i = 1; i < mainTB.childNodes.length; i++) {
                    inputs[i] = mainTB.childNodes[i].lastChild.firstChild;

                    if (inputs[i].nodeName != "INPUT") continue;

                    inputs[i].parentNode.appendChild(doc.createTextNode("Endzeit:"));
                    inputs[i].addEventListener("keyup", kl_BerechneProdZeit, true);
                    inputs[i].addEventListener("keyup", kl_ProdKosten, true);
                    inputs[i].addEventListener("change", clr, true);

                    var Produkt = mainTB.childNodes[i].firstChild.lastChild.firstChild
                            .firstChild.firstChild.firstChild;

                    var info = doc.createTextNode("Prod.zeit: ");
                    Input = NeuesElement(doc, "INPUT", "", "maxlength", "8", "value", "DD:HH:MM", "size", "8");

                    EinfuegenHinter(info, Produkt.nextSibling);
                    EinfuegenHinter(Input, info);
                    Input.addEventListener("focus", empty, true);
                    Input.addEventListener("keyup", kl_BerechneProduktion, true);
                    Input.addEventListener("keyup", kl_BerechneProdZeit, true);
                    Input.addEventListener("keyup", kl_ProdKosten, true);
                    Input.addEventListener("change", clr, true);

                }
            }
        } else if (doc.location.href.search("page=markt3") > -1 && doc.location.href.search("filled=1") == -1) {
            if (kl_prefManager.getBoolPref("extensions.ks.ausgabenmarkt")) {
                mainForm = FindeTags(doc, "FORM", new Function("Kn", "return (Kn.parentNode.nodeName == 'TD' && Kn.getAttribute('id') != 'kss');"));

                Input = mainForm[0].childNodes[3];


                EinfuegenHinter(NeuesElement(doc, "font", "", "id", "gesamtkosten"), mainForm[0].nextSibling);

                anzahl = Input.value;
                var td = Input.parentNode.parentNode;
                preis = td.textContent;
                preis = preis.substring(preis.search("zum Preis von") + 14, preis.search("¢"));

                kosten = preis * anzahl;

                kosten = Math.round(kosten * 100) / 100;

                kosten = Math.setSectionPoints(kosten);

                doc.getElementById("gesamtkosten").textContent = "Gesamtkosten: " + kosten + " ¢";

                Input.addEventListener("keyup", kl_BerechneKosten, true);
            }
        } else if (doc.location.href.search("page=kauf5") > -1) {
            if (kl_prefManager.getBoolPref("extensions.ks.umsatzverkauf")) {
                mainTable = FindeTags(doc, "TABLE", new Function("Kn", "return (Kn.parentNode.nodeName == 'FORM' && Kn.parentNode.parentNode.nodeName == 'TD');"));

                mainTB = mainTable[0].firstChild;

                for (i = 1; i < mainTB.childNodes.length; i++) {
                    mainTB.childNodes[i].lastChild.firstChild.addEventListener("keyup", kl_BerechneUmsatz, true);
                }

                Input = mainTable[0].parentNode.lastChild.childNodes[1];
                Input.setAttribute("id", "preis");

                Input.addEventListener("keyup", kl_BerechneUmsatz, true);

                EinfuegenHinter(NeuesElement(doc, "font", "Gewinn in %:"), mainTable[0].parentNode.lastChild);

                EinfuegenHinter(NeuesElement(doc, "INPUT", "", "maxlength", "6", "value", "Gewinn", "size", "6", "id", "gewinn"), mainTable[0].parentNode.lastChild);
                doc.getElementById("gewinn").addEventListener("keyup", kl_berechneGewinn, true);
                doc.getElementById("gewinn").addEventListener("focus", empty, true);

                EinfuegenHinter(NeuesElement(doc, "font", "", "id", "umsatz"), mainTable[0].parentNode.lastChild);
                doc.getElementById("umsatz").textContent = " Umsatz:  Gewinn:  Gewinn pro Stück:";
                Input.parentNode.parentNode.parentNode.removeChild(Input.parentNode.parentNode.parentNode.lastChild);


            }
        } else if (doc.location.href.search("page=lager&") > -1) {
            var prodInputs = FindeTags(doc, "INPUT", new Function("Kn", "return (Kn.getAttribute('name') == 'p_anz[]');"));

            if (kl_prefManager.getBoolPref("extensions.ks.allewaren")) {
                for (i = 0; i < prodInputs.length; i++) {
                    prodInputs[i].parentNode.appendChild(doc.createElement("BR"));
                    var allewaren = new Array();
                    allewaren[i] = NeuesElement(doc, "A", "Alles", "style", "cursor: pointer;");
                    allewaren[i].addEventListener("click", kl_alleWaren, true);
                    prodInputs[i].parentNode.appendChild(allewaren[i]);
                }
            }

            if (kl_prefManager.getBoolPref("extensions.ks.umsatzlager")) {

                for (i = 0; i < prodInputs.length; i++) {
                    prodInputs[i].addEventListener("keyup", kl_lager, true);
                }

                var marktPreis = FindeTags(doc, "INPUT", new Function("Kn", "return (Kn.getAttribute('name') == 'wbet');"));
                marktPreis[0].addEventListener("keyup", kl_lager, true);

                var vertragPreis = FindeTags(doc, "INPUT", new Function("Kn", "return (Kn.getAttribute('name') == 'vbet');"));
                vertragPreis[0].addEventListener("keyup", kl_lager, true);

                EinfuegenHinter(NeuesElement(doc, "font", "", "id", "gewinn"), marktPreis[0].parentNode.parentNode.parentNode.parentNode);
                doc.getElementById("gewinn").textContent = "Umsatz:  Gewinn:  Gewinn pro Stück:";
            }

            if (kl_prefManager.getBoolPref("extensions.ks.gesamtwert")) {

                var produkt = new Array();
                preis = new Array();

                for (i = 0; i < prodInputs.length; i++) {

                    produkt[i] = prodInputs[i].parentNode.parentNode.firstChild.lastChild.textContent.replace(/[.]/g, "");
                    produkt[i] = produkt[i].replace(/\s/, "");

                    preis[i] = prodInputs[i].parentNode.parentNode.childNodes[3].textContent;
                    preis[i] = preis[i].replace(/\s/, "");
                    preis[i] = preis[i].replace(/[.]/, "");
                    preis[i] = preis[i].replace(",", ".");
                    preis[i] = preis[i].replace("¢", "");

                }

                var summe = 0;

                for (i = 0; i < produkt.length; i++) {

                    summe = summe * 1 + (produkt[i] * preis[i]);
                    summe = Math.round(summe * 100) / 100;
                }
                EinfuegenHinter(NeuesElement(doc, "font", "Gesamtwarenwert: " + Math.setSectionPoints(summe) + "¢", "align", "right"), prodInputs[1].parentNode.parentNode.parentNode.parentNode);


            }
        } else if (doc.location.href.search(/page=(roh|forschen|kauf|oeffent|spez)7&/) > -1)
        {
            if (kl_prefManager.getBoolPref("extensions.ks.ausbau")) {

                var Input = FindeTags(doc, "INPUT", new Function("Kn", "return (Kn.getAttribute('name') == 'ausbau');"));

                Input[0].addEventListener("keyup", kl_ausbau, true);

                var table = Input[0].parentNode.parentNode.parentNode.parentNode;
                var kosten = NeuesElement(doc, "font", "Kosten:" + unescape("%A0%A0") + "Dauer:", "id", "kosten");
                var kosten2 = NeuesElement(doc, "font", "Steine:" + unescape("%A0%A0") + "Stahl:" + unescape("%A0%A0") + "Holz:", "id", "kosten2");
                EinfuegenHinter(kosten2, table);
                EinfuegenHinter(doc.createElement("BR"), table);
                EinfuegenHinter(kosten, table);
            }
        } else if (doc.location.href.search("page=vertrag&") > -1)
        {
            if (kl_prefManager.getBoolPref("extensions.ks.schnellzugriff")) {
                var vertraege = FindeTags(doc, "TR", new Function("Kn", "return (Kn.getAttribute('onmouseout') == 'clr()');"));

                for (i = 0; i < vertraege.length; i++)
                {
                    var url = vertraege[i].childNodes[1].firstChild.getAttribute("href");

                    if (check(vertraege[i].childNodes[1].firstChild.textContent, gebaeudeNamen)) {
                        anurl = url.replace("vertrag2", "vertrag9");
                        aburl = url.replace("vertrag2", "vertrag10");
                    } else if (vertraege[i].childNodes[1].firstChild.textContent.search("Technologie") > -1) {
                        anurl = url.replace("vertrag2", "vertrag12");
                        aburl = url.replace("vertrag2", "vertrag11");
                    } else if (vertraege[i].childNodes[1].firstChild.textContent.search("Coins") > -1) {
                        anurl = url.replace("vertrag2", "vertrag14");
                        aburl = url.replace("vertrag2", "vertrag13");
                    } else {
                        anurl = url.replace("vertrag2", "vertrag3");
                        aburl = url.replace("vertrag2", "vertrag4");
                    }

                    var annehmen = NeuesElement(doc, "A", "Annehmen", "href", anurl, "style", "padding-left: 20px; padding-right: 5px");
                    var ablehnen = NeuesElement(doc, "A", "Ablehnen", "href", aburl, "style", "padding-left: 5px");

                    vertraege[i].childNodes[1].appendChild(annehmen);
                    vertraege[i].childNodes[1].appendChild(doc.createTextNode("|"));
                    vertraege[i].childNodes[1].appendChild(ablehnen);

                }
            }
        } // ----------Skip Pages-------------
        else if (doc.location.href.search(/vertrag(3|4|5|9|10|11|12|13|14)/) > -1) {
            if (kl_prefManager.getBoolPref("extensions.ks.vertragskip") && doc.firstChild.textContent.search("Du hast nicht genug Geld") == -1) {
                loc = doc.location.href;
                loc = loc.substring(0, loc.search("&nr="));
                loc = loc.replace(/vertrag[0-9]*/, "vertrag");
                gBrowser.selectedBrowser.contentDocument.location.replace(loc);
            }
        }
        else if (doc.location.href.search("page=roh2&") > -1) {
            if (kl_prefManager.getBoolPref("extensions.ks.prodskip") && doc.firstChild.textContent.search("Du verfügst nicht über gen") == -1 && doc.firstChild.textContent.search("Bitte wähle einen Rohstoff") == -1) {
                loc = "http://" + doc.location.host + doc.location.pathname + "?" + "page=gebs&UIN=" + extract(doc.location.search, "UIN=", "&") + "&show=all";
                gBrowser.selectedBrowser.contentDocument.location.replace(loc);
            }
        }
        else if (doc.location.href.search("page=markt3&") > -1 && doc.location.href.search("filled=1") > -1) {
            if (kl_prefManager.getBoolPref("extensions.ks.marktskip") && doc.firstChild.textContent.search("Es wurden") > -1) {
                gBrowser.selectedBrowser.contentDocument.location.replace(window.content.history[window.content.history.length - 3]);
            }
        } else if (doc.location.href.search("page=adress_notizbuch") > -1)
        {
            if (kl_prefManager.getBoolPref("extensions.ks.sortadress")) {
                var mainForm = FindeTags(doc, "FORM", new Function("Kn", "return (Kn.parentNode.nodeName == 'TD' && Kn.getAttribute('id') != 'kss');"));
                var firmen = new Array();
                for (i = 1; i < mainForm[0].firstChild.firstChild.childNodes.length; i++)
                {
                    firmen[i] = mainForm[0].firstChild.firstChild.childNodes[i];
                }

                firmen.sort(sortAdress);

                for (i = 1; mainForm[0].firstChild.firstChild.childNodes.length != 1; i++) {
                    mainForm[0].firstChild.firstChild.removeChild(mainForm[0].firstChild.firstChild.childNodes[1]);
                }
                for (i = 0; i < firmen.length; i++) {
                    mainForm[0].firstChild.firstChild.appendChild(firmen[i]);
                }
            }
        } else if (doc.location.href.search("page=nachricht4") > -1) {
            if (kl_prefManager.getBoolPref("extensions.ks.nachrichtskip")) {
                loc = doc.location.href;
                loc = loc.replace(/nachricht[0-9]*/, "nachricht");
                gBrowser.selectedBrowser.contentDocument.location.replace(loc);
            }
        } else if (doc.location.href.search(/page=nachricht3?&/) > -1) {
            // Nichts
        } else if (doc.location.href.search(/page=forschen&/) > -1) {
            if (kl_prefManager.getBoolPref("extensions.ks.forschend")) {
                var forschLinks = FindeTags(doc, "A", new Function("Kn", "return (Kn.getAttribute('href').search('page=forschen2&') > -1);"));

                doc.addEventListener("mousemove", mouseMove, true);

                doc.firstChild.lastChild.appendChild(NeuesElement(doc, "div", "", "id", "klDiv", "style", "visibility:hidden; Z-INDEX: 5; LEFT: -1px; POSITION: absolute; top: 9px; border:outset; border-width:2px; border-color:#fAffe0;"));

                for (i = 0; i < forschLinks.length; i++) {

                    forschLinks[i].addEventListener("mouseover", kl_forschZeit, true);
                    forschLinks[i].addEventListener("mouseout", clr, true);

                }
            }
        } else if (doc.location.href.search(/page=kauf11&/) > -1) {
            if (kl_prefManager.getBoolPref("extensions.ks.wb")) {
                var mainTable = FindeTags(doc, "TABLE", new Function("Kn", "return (Kn.parentNode.nodeName == 'FORM' && Kn.parentNode.parentNode.nodeName == 'TD');"));

                var mainTB = mainTable[0].firstChild;

                for (i = 1; i < mainTB.childNodes.length; i++) {
                    mainTB.childNodes[i].lastChild.firstChild.addEventListener("keyup", kl_berechneWerbung, true);
                }
                EinfuegenHinter(NeuesElement(doc, "font", "", "id", "wb"), mainTable[0].nextSibling.firstChild);
                doc.getElementById("wb").textContent = "Werbepunkte: ";
            }
        } else if (doc.location.href.search("page=kaufs&") > -1) {
            if (kl_prefManager.getBoolPref("extensions.ks.wb")) {
                /*var a = FindeTags(doc,"A", new Function("Kn","return (Kn.textContent.search('werben') > -1);"));
              wb = parseFloat(a[0].parentNode.firstChild.textContent);*/
            }
        } else if (doc.location.href.search("page=uebersicht&") > -1) {
if(kl_prefManager.getBoolPref("extensions.ks.todo")){
var todo = new kl_notizbuch(doc);
                    todo.set();
                    todo.move(600,150);
		todo.show();

}
}
try{
if(kl_prefManager.getBoolPref("extensions.ks.notizbuch")){
                    var notizbuch = NeuesElement(doc, "font", "Notizbuch", "style", "font-weight: bold;cursor: pointer;");

		var nb = new kl_notizbuch(doc);
                    nb.set();
                    nb.moveTo(nx,ny);
                    notizbuch.addEventListener("click",nb.change,true);
                    menue[0].appendChild(doc.createElement("BR"));
                    menue[0].appendChild(notizbuch);
			if(show_nb){
			nb.show();
                } }
}catch(e){}
      /*
ende = new Date();
doc.firstChild.lastChild.appendChild(NeuesElement(doc,"font","Execution Time:"+((parseFloat(ende.getTime())-parseFloat(start.getTime()))/1000)+" s","style","color: white;"));
    */
    }
}

kl_init();